classdef HybridOptimizationBasedMultiLabelFeatureSelection ...
        < MultiLabelAlgorithm ...
        & MultiLabelAlgorithm0able ...
        & Modelable
    %HYBRIDOPTIMIZATIONBASEDMULTILABELFEATURESELECTION Summary of this class goes here
    %   Detailed explanation goes here
    
    properties ( SetAccess = protected )
        timeK = 5 % Time limit for simulated anealing
        timeG = 5 % Time limit for generic algorithm
        timeH = 5 % Time limit for hill climbing
        pc = 0.65 % ?
    end
    
    methods
        function [  ] = setTimeK( this, timeK )
            if nargin == 1
            end
            if nargin == 2
                this.timeK = timeK;
            end
        end
        
        function [  ] = setTimeG( this, timeG )
            if nargin == 1
            end
            if nargin == 2
                this.timeG = timeG;
            end
        end
        
        function [  ] = setTimeH( this, timeH )
            if nargin == 1
            end
            if nargin == 2
                this.timeH = timeH;
            end
        end
        
        function [  ] = setPc( this, pc )
            if nargin == 1
            end
            if nargin == 2
                this.pc = pc;
            end
        end
    end
    
    methods
        function [ this ] = HybridOptimizationBasedMultiLabelFeatureSelection( name )
            if nargin == 0
                this.setName('homl');
            end
            if nargin >= 1
                this.setName(name);
            end
        end
    end
    
    methods
        function [  ] = build( this, X1, Y1 )
            this.model.zRank = buildHOML(X1, Y1, this.timeK, this.timeG, this.timeH, this.pc, this.algorithm0);
        end
        
        function [ result ] = apply( this, X2, Y2 )
            result = X2(:, this.model.zRank);
        end
    end
    
end

